package ocio.actions;


import java.util.HashSet;
import java.util.Set;

import ocio.beans.Admin;
import ocio.beans.Cliente;
import ocio.beans.Reserva;
import ocio.beans.Subscripcion;
import ocio.services.AdminService;
import ocio.services.ClienteService;
import ocio.services.ServiceLocator;
import ocio.services.SubscripcionService;


import com.opensymphony.xwork2.ActionSupport;

/**
 * Clase destinataria de petición de baja de una subscripcion.
 * @author Esther García Galán
 * @author Rubén Gómez Vales
 * @version 1.0 13/05/2014
 * @see ocio.beans.Subscripcion
 */
public class AnularSubscripcionAction extends ActionSupport {

	private static final long serialVersionUID = 1L;
	private int id;
	private int rol;
	private Set<Subscripcion> listaSubscripciones = new HashSet<Subscripcion>();
	private Set<Reserva> listaReservas = new HashSet<Reserva>();
	private Cliente cliente;
	private Admin admin;
	
	  /**
		 * Método execute() de la clase ActionSupport de Struts 2. 
		 * Solicita los servicios para eliminar una subscripcion de un cliente o administrador.
		 * @return un string que indica la respuesta de la acción ejecutada sobre la petición del usuario
		 */
	public String execute(){

		ServiceLocator serviceLocator = ServiceLocator.getServiceLocator();

		SubscripcionService subscripService = (SubscripcionService)serviceLocator.getService("Subscripcion");		
		Subscripcion subscrip = (Subscripcion)subscripService.searchById(id);
		// La subscripcion puede pertencer a un cliente o al admin
		// además de borrarla se deben recuperar los datos para el jsp de vuelta
		if (subscrip.getCliente()!=null){
			rol=2;
			int idUsuario = subscrip.getCliente().getId();
			subscripService.delete(subscrip);
			ClienteService clienteService = (ClienteService)serviceLocator.getService("Cliente");		
    		cliente = (Cliente)clienteService.searchById(idUsuario); 
    		listaReservas = cliente.getReservas();
    		listaSubscripciones = cliente.getSubscripciones();
		} else {
			rol=1;
			int idUsuario = subscrip.getAdmin().getId();
			subscripService.delete(subscrip);
			AdminService adminService = (AdminService)serviceLocator.getService("Admin");		
    		admin = (Admin)adminService.searchById(idUsuario);
    		listaReservas = admin.getReservas();
    		listaSubscripciones = admin.getSubscripciones();
		}

		return "success";
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}


	public Admin getAdmin() {
		return admin;
	}

	public void setAdmin(Admin admin) {
		this.admin = admin;
	}

	public int getRol() {
		return rol;
	}

	public void setRol(int rol) {
		this.rol = rol;
	}

	public Set<Reserva> getListaReservas() {
		return listaReservas;
	}

	public void setListaReservas(Set<Reserva> listaReservas) {
		this.listaReservas = listaReservas;
	}

	public Set<Subscripcion> getListaSubscripciones() {
		return listaSubscripciones;
	}

	public void setListaSubscripciones(Set<Subscripcion> listaSubscripciones) {
		this.listaSubscripciones = listaSubscripciones;
	}
}
